package cn.iocoder.yudao.module.system.controller.admin.wishlist.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 用户志愿表（包含成绩信息） Response VO
 */
@Schema(description = "管理后台 - 用户志愿表（包含成绩信息） Response VO")
@Data
public class UserWishListWithScoreRespVO {

    // ========== 志愿表基本信息 ==========
    
    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    private Long id;

    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    private Long userId;

    @Schema(description = "关联的用户成绩记录ID", example = "1")
    private Long userScoreId;

    @Schema(description = "招生省份", example = "北京")
    private String provinceName;

    @Schema(description = "高校唯一ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "uuid-123")
    private String schoolUuid;

    @Schema(description = "高校名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "北京大学")
    private String schoolName;

    @Schema(description = "专业名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "计算机科学与技术")
    private String majorName;

    @Schema(description = "专业代码", example = "080901")
    private Integer majorCode;

    @Schema(description = "录取年份", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024")
    private Integer year;

    @Schema(description = "最高分", example = "680")
    private String highScore;

    @Schema(description = "平均分", example = "670")
    private String averageScore;

    @Schema(description = "最低分", example = "660")
    private String lowestScore;

    @Schema(description = "最低位次", example = "1000")
    private String lowestSection;

    @Schema(description = "录取批次", example = "本科一批")
    private String batchName;

    @Schema(description = "专业类型", example = "物理类")
    private String typeName;

    @Schema(description = "专业分数", example = "0")
    private String proScore;

    @Schema(description = "选科要求", example = "物理+化学")
    private String subjectSelection;

    @Schema(description = "专业标准代码", example = "0809")
    private String majorStandardCode;

    @Schema(description = "志愿类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "rush", 
            allowableValues = {"rush", "stable", "safe"})
    private String wishType;

    @Schema(description = "志愿顺序（在同类型中的排序）", example = "1")
    private Integer wishOrder;

    @Schema(description = "备注信息", example = "这是我的第一志愿")
    private String remark;

    @Schema(description = "招生计划信息（JSON格式）", example = "{\"year\":2024,\"enrollmentNumbers\":50}")
    private String enrollmentPlan;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    private LocalDateTime createTime;

    @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
    private LocalDateTime updateTime;

    // ========== 用户基本信息字段 ==========

    @Schema(description = "用户当前省份", example = "北京")
    private String userProvince;

    @Schema(description = "用户当前总分", example = "650")
    private Integer userTotalScore;

    @Schema(description = "用户当前选科", example = "物理+化学+生物")
    private String userSubjectSelection;

    @Schema(description = "用户当前年份", example = "2024")
    private Integer userYear;

    // ========== 关联的成绩信息 ==========

    @Schema(description = "成绩记录省份", example = "北京")
    private String scoreProvince;

    @Schema(description = "成绩记录年级", example = "高三")
    private String scoreGrade;

    @Schema(description = "成绩记录首选科目", example = "物理")
    private String scoreFirstSubject;

    @Schema(description = "成绩记录次选科目", example = "化学")
    private String scoreSecondSubject;

    @Schema(description = "成绩记录总分", example = "650.5")
    private BigDecimal scoreTotal;

    @Schema(description = "成绩记录排名", example = "1000")
    private String scoreRanking;

    @Schema(description = "成绩记录排名区间", example = "1000-1500")
    private String scoreRankingRange;

    @Schema(description = "成绩记录用户类型", example = "物理类")
    private String scoreTypeName;

    @Schema(description = "成绩记录最低分数", example = "600.0")
    private BigDecimal scoreMinScore;

    @Schema(description = "成绩记录最高分数", example = "700.0")
    private BigDecimal scoreMaxScore;

    @Schema(description = "成绩记录考试年份", example = "2024")
    private Integer scoreExamYear;

    @Schema(description = "是否为当前使用的成绩记录", example = "true")
    private Boolean scoreIsCurrent;

    @Schema(description = "成绩记录备注", example = "高考成绩")
    private String scoreRemark;
}